/**
 * 
 */
package br.edu.unoesc.smschool.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

import org.apache.commons.lang.builder.CompareToBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * @author Luiz
 * data: 15-08-2011
 */
@Entity
public class Cidade extends GenericModel implements Comparable<Cidade>{
    
	
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long codigo;
    @Column(nullable=false)
    private String nome;
    @ManyToOne(fetch=FetchType.LAZY)
    private Estado estado;

    

    public Long getCodigo() {
        return codigo;
    }

    public void setCodigo(Long codigo) {
        this.codigo = codigo;
    }

    public Estado getEstado() {
        return estado;
    }

    public void setEstado(Estado estado) {
        this.estado = estado;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    @Override
    public boolean equals(Object obj){
        Cidade outro = (Cidade)obj;
        if(this == obj) return true;
        if(obj == null) return false;
        Cidade that = (Cidade)obj;
        return new EqualsBuilder().append(this.getNome(), outro.getNome()).isEquals();
    } 


    @Override
    public int hashCode(){
    	int obj1 = 0;
    	int obj2 = 0;
    	if(obj1==obj2) return obj1;
    	if(obj2 == obj1) return obj2;
        return new HashCodeBuilder().append(this.getNome()).hashCode();
    }
    
    @Override
    public String toString(){
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE).append("Nome",this.getNome()).toString();
    }

    
    public int compareTo(Cidade o) {
        return new CompareToBuilder().append(this.getNome(),o.getNome()).toComparison();
    }

}

